package me.keiwu.pub.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Created by kei on 22/08/2017.
 */
public class BigDecimalUtil {


    /**
     * 加法
     * @param value1
     * @param value2
     * @return
     */
    public static double add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.add(b2).doubleValue();
    }

    /**
     * 减法
     * @param value1
     * @param value2
     * @return
     */
    public static double sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.subtract(b2).doubleValue();
    }


    /**
     * 乘法
     * @param value1
     * @param value2
     * @return
     */
    public static double mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(value1);
        BigDecimal b2 = new BigDecimal(value2);
        return b1.multiply(b2).doubleValue();
    }


    /**
     * 除法 默认精确到2位，四舍五入
     * @param value         被除数
     * @param divide        除数
     * @return
     * @throws IllegalAccessException
     */
    public static double div(double value, double divide) {
        return div(value, divide, 2, RoundingMode.HALF_UP);
    }

    /**
     * 除法 默认精确到2位
     * @param value         被除数
     * @param divide        除数
     * @param roundingMode  精确模式
     * @return
     * @throws IllegalAccessException
     */
    public static double div(double value, double divide, RoundingMode roundingMode) {
        return div(value, divide, 2, roundingMode);
    }

    /**
     * 除法
     * @param value         被除数
     * @param divide        除数
     * @param scale         精确度
     * @param roundingMode  精确模式
     * @return
     */
    public static double div(double value, double divide, int scale, RoundingMode roundingMode) {
        if (scale < 0) {
            throw new IllegalArgumentException("精确度不能小于0");
        }
        BigDecimal b1 = new BigDecimal(value);
        BigDecimal b2 = new BigDecimal(divide);
        return b1.divide(b2, scale, roundingMode).doubleValue();
    }

}